[php-nextgen] Add anyof Support#24306
Conversation
There was a problem hiding this comment.
All reported issues were addressed across 35 files
Tip: cubic can generate docs of your entire codebase and keep them up to date. Try it here.
Re-trigger cubic
There was a problem hiding this comment.
All reported issues were addressed across 5 files (changes from recent commits).
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
| supportingFiles.add(new SupportingFile("ObjectSerializer.mustache", toSrcPath(invokerPackage, srcBasePath), "ObjectSerializer.php")); | ||
| supportingFiles.add(new SupportingFile("ModelInterface.mustache", toSrcPath(modelPackage, srcBasePath), "ModelInterface.php")); | ||
| supportingFiles.add(new SupportingFile("OneOfInterface.mustache", toSrcPath(modelPackage, srcBasePath), "OneOfInterface.php")); | ||
| supportingFiles.add(new SupportingFile("ComposedInterface.mustache", toSrcPath(modelPackage, srcBasePath), "ComposedInterface.php")); |
There was a problem hiding this comment.
What about keeping the OneOfInterface and adding a AnyOfInterface instead?
Renaming OneOfInterface to ComposedInterface is a breaking change if I'm not mistaken.
For other generators we do maintain separate implementations (mustache files) for anyOf and oneOf.
There was a problem hiding this comment.
I'm definitely not opposed to splitting them out, I implemented it this way since the two are so similar to avoid some more duplication. But if we want to match some of the other generators we can definitely migrate to 2 separate models.
This is technically breaking, but the original oneOf implementation hasn't been released yet, so the only people this would break is those using 7.24.0-SNAPSHOT. If that's an issue then we can definitely break these out into oneOf/anyOf. Let me know and I can start on that
There was a problem hiding this comment.
@coffeemakr can you please also review this change when you've time since this is a follow-up PR to #23985 authored by you?
There was a problem hiding this comment.
Personally I prefer making the implementation more consistent to other generators. In addition, the term Composed may not be familiar to developers who just start using OpenAPI in their workflow.
There was a problem hiding this comment.
Sounds good, I'll get started on this rn
There was a problem hiding this comment.
@wing328 I think this should be all set now, its now split into OneOfInterface and AnyOfInterface, I did leave "Composed" in the ClientCodegen, which shouldn't be breaking and won't ever be seen by users, but lmk if I need to split that out as well.
|
also cc @coffeemakr @JulianVennen (top contributors to php-nextgen client generator) |
…into php-nextgen-anyof
There was a problem hiding this comment.
All reported issues were addressed across 36 files
Tip: cubic can generate docs of your entire codebase and keep them up to date. Try it here.
Re-trigger cubic
There was a problem hiding this comment.
All reported issues were addressed across 4 files (changes from recent commits).
Tip: Review your code locally with the cubic CLI to iterate faster.
Re-trigger cubic
…tSerializer.mustache Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
|
thanks for the PR and incorporating the feedback |
Follow up to #23985
This PR adds support for anyOf models with and without discriminators. It copies the implementation from the oneOf model and updates some of the naming/logic to refer to
Composedinstead ofoneOforanyOfspecifically.PR checklist
Commit all changed files.
This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
These must match the expectations made by your contribution.
You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example
./bin/generate-samples.sh bin/configs/java*.IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
@jebentier (2017/07), @dkarlovi (2017/07), @mandrean (2017/08), @jfastnacht (2017/09), @ybelenko (2018/07), @renepardon (2018/12)
Summary by cubic
Adds
anyOfsupport to the PHP Nextgen generator by introducingAnyOfInterfaceand generated dispatcher models, and updatesObjectSerializerto reliably dispatchoneOf/anyOfwith safer JSON decoding. Samples, docs, and tests are regenerated, including new petstoreanyOfmodels.New Features
anyOfdispatcher models viamodel_anyof.mustache; addAnyOfInterfaceand register it inPhpNextgenClientCodegen.deserializeAnyOf()and dispatch for bothOneOfInterfaceandAnyOfInterfaceinObjectSerializer; dispatch runs afterjson_decodeand before array-to-object casting.anyOfmembers and discriminator selection; skip per-property test stubs for composed models; add petstoreReptile,Smoothie,Lizard,Snake; regenerate echo and petstore samples; addanyOfpolymorphism tests.Bug Fixes
"null"literal); catchThrowableduring deserialization; tighten composed-type validation.Written for commit 9add223. Summary will update on new commits.